import { apiClient } from './api-client';
import { 
  UserInfo, 
  UserQueryParams, 
  UserRequest, 
  BaseResponse,
  PaginationResponse 
} from '../types/api.types';

export class UserService {
  private static readonly BASE_URL = '/users';

  /**
   * 获取用户列表（分页）
   * @param params 查询参数
   * @returns 用户列表
   */
  static async getUserList(params: UserQueryParams): Promise<BaseResponse<PaginationResponse<UserInfo>>> {
    try {
      const response = await apiClient.get<PaginationResponse<UserInfo>>(
        `${this.BASE_URL}/list`,
        params
      );
      return response;
    } catch (error) {
      console.error('获取用户列表失败:', error);
      throw error;
    }
  }

  /**
   * 获取用户详情
   * @param userId 用户ID
   * @returns 用户信息
   */
  static async getUserDetail(userId: number): Promise<BaseResponse<UserInfo>> {
    try {
      // 这里假设有获取用户详情的接口
      // 如果没有，可以从列表接口中筛选
      const response = await apiClient.get<UserInfo>(
        `${this.BASE_URL}/${userId}`
      );
      return response;
    } catch (error) {
      console.error('获取用户详情失败:', error);
      throw error;
    }
  }

  /**
   * 创建用户
   * @param userData 用户数据
   * @returns 创建结果
   */
  static async createUser(userData: UserRequest): Promise<BaseResponse<string>> {
    try {
      const response = await apiClient.post<string>(
        this.BASE_URL,
        userData
      );
      return response;
    } catch (error) {
      console.error('创建用户失败:', error);
      throw error;
    }
  }

  /**
   * 更新用户信息
   * @param userData 用户数据
   * @returns 更新结果
   */
  static async updateUser(userData: UserRequest): Promise<BaseResponse<string>> {
    try {
      const response = await apiClient.put<string>(
        this.BASE_URL,
        userData
      );
      return response;
    } catch (error) {
      console.error('更新用户失败:', error);
      throw error;
    }
  }

  /**
   * 删除用户
   * @param userId 用户ID
   * @returns 删除结果
   */
  static async deleteUser(userId: number): Promise<BaseResponse<string>> {
    try {
      const response = await apiClient.delete<string>(
        `${this.BASE_URL}/${userId}`
      );
      return response;
    } catch (error) {
      console.error('删除用户失败:', error);
      throw error;
    }
  }

  /**
   * 批量删除用户
   * @param userIds 用户ID数组
   * @returns 批量删除结果
   */
  static async batchDeleteUsers(userIds: number[]): Promise<BaseResponse<string>> {
    try {
      const response = await apiClient.delete<string>(
        `${this.BASE_URL}/batch`,
        { body: userIds }
      );
      return response;
    } catch (error) {
      console.error('批量删除用户失败:', error);
      throw error;
    }
  }

  /**
   * 重置用户密码
   * @param userId 用户ID
   * @param newPassword 新密码
   * @returns 重置结果
   */
  static async resetPassword(userId: number, newPassword: string): Promise<BaseResponse<string>> {
    try {
      // 这里假设有重置密码的接口
      const response = await apiClient.post<string>(
        `${this.BASE_URL}/${userId}/reset-password`,
        { newPassword }
      );
      return response;
    } catch (error) {
      console.error('重置密码失败:', error);
      throw error;
    }
  }

  /**
   * 更新用户状态
   * @param userId 用户ID
   * @param status 状态
   * @returns 更新结果
   */
  static async updateUserStatus(userId: number, status: number): Promise<BaseResponse<string>> {
    try {
      // 这里假设有更新状态的接口
      const response = await apiClient.patch<string>(
        `${this.BASE_URL}/${userId}/status`,
        { status }
      );
      return response;
    } catch (error) {
      console.error('更新用户状态失败:', error);
      throw error;
    }
  }

  /**
   * 搜索用户
   * @param keyword 关键词
   * @returns 搜索结果
   */
  static async searchUsers(keyword: string): Promise<BaseResponse<UserInfo[]>> {
    try {
      // 这里假设有搜索接口，或者使用列表接口进行搜索
      const response = await apiClient.get<UserInfo[]>(
        `${this.BASE_URL}/search`,
        { keyword }
      );
      return response;
    } catch (error) {
      console.error('搜索用户失败:', error);
      throw error;
    }
  }
}

export default UserService;